import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { createHtmlPlugin } from 'vite-plugin-html'
import { visualizer } from 'rollup-plugin-visualizer' // 导入可视化插件
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd())
  // 访问 VITE_BASE_URL
  console.log('VITE_BASE_URL:', env.VITE_BASE_URL)

  const plugins = [
    vue({
      template: {
        compilerOptions: {
          isCustomElement: (tag) => tag.includes('wx-open-launch-weapp')
        }
      }
    }),
    vueJsx(),
    createHtmlPlugin({
      minify: true,
      /**
       * 在这里写entry后，你将不需要在`index.html`内添加 script 标签，原有标签需要删除
       * @default src/main.ts
       */
      entry: mode === 'mobile' ? 'src/main-m.ts' : 'src/main-pc.ts',
      /**
       * 如果你想将 `index.html`存放在指定文件夹，可以修改它，否则不需要配置
       * @default index.html
       */
      // template: 'public/index.html',

      /**
       * 需要注入 index.html ejs 模版的数据
       */
      inject: {
        data: {},
        tags: []
      }
    })
  ]
  if (process.env.NODE_ENV === 'production') {
    const filename = path.resolve(
      __dirname,
      `dist/${mode === 'mobile' ? 'mobile' : 'pc'}/report.html`
    )
    plugins.push(
      visualizer({
        open: true, // 打包后自动打开报告
        filename: filename, // 生成的报告文件名和路径
        template: 'treemap' // 可选：报告的模板类型
      })
    )
  }
  return {
    base: env.VITE_BASE_URL, // 设置打包后的输入前缀
    plugins: plugins,
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '@ny-ui': path.resolve(__dirname, './packages/src') // 设置别名
      }
    },
    build: {
      // 根据不同的目标设置输出目录
      outDir: mode === 'mobile' ? 'dist/mobile' : 'dist/pc',
      rollupOptions: {
        input: path.resolve(__dirname, 'index.html')
      }
    },
    server: {
      proxy: {
        // 代理 /api_cps 路径
        '/api_cps': {
          target: 'http://cps.run4wd.com/api/', // 目标服务器
          changeOrigin: true, // 是否改变源
          rewrite: (path) => path.replace(/^\/api_cps/, '/') // 重写路径
        },
        '/api_op': {
          target: 'http://47.99.75.3:8050/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api_op/, '/') // 重写路径
        }
      }
    }
  }
})
